#ifndef __CK_CHECK_PROJECT_H__
#define __CK_CHECK_PROJECT_H__

#include "ckObject.h"
#include "zCore.h"
#include "ckDataProductInfo.h"

#include <string>

namespace ck
{
	namespace check
	{
		class CheckResultSet;
	}

	class CheckCase;
	class DataSource;
	class FolderDataSource;
	class EnumDataSource;

	class ZCORE_API CheckProject : public ckObject
	{
	public:
		CheckProject();
		virtual ~CheckProject();

	public:
		const char*		GetName();
		z_uint32		GetCode();
		CheckCase*		GetCheckCase();
		ckDataProductType	GetProductType();
		
		void			SetName(const char* szName);
		void			SetCode(z_uint32 nCode);
		void			SetCheckCase(CheckCase* pCase);

		EnumDataSource*	GetDataSources();
		RESULTCODE		AddDataSource(DataSource* pDataSource);
		DataSource*		GetDataSource(const char* szName);
		RESULTCODE		RemoveDataSource(const char* szName);

		z_uint32		GetDatasetCount();
		z_int32			AddDatasets(DataSource* pDataSource);
		z_int32			AddDatasets(FolderDataSource* pDataSource);

		check::CheckResultSet* GetCheckResultSet();
		void			SetCheckResultSet(check::CheckResultSet* pCheckResultSet);

		RESULTCODE		Close();

	protected:	//Property
		std::string		m_strName;
		z_uint32		m_nCode;		
		ckDataProductType m_productType;

	protected:	//Composite Objects
		CheckCase*		m_pCheckCase;
		EnumDataSource* m_pSources;
		check::CheckResultSet* m_pCheckResultSet;
	};
}

#endif //__CK_CHECK_PROJECT_H__
